﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using WCFAccesos.Dominio;


namespace WCFAccesos.Persistencia
{
    public class GRUsuarioDAO
    {
        public GRUsuario Loguear(string logUsu, string passUsu)
        {
            SqlDataReader resultado = null;
            SqlConnection con = null;
            SqlCommand com = null;
            GRUsuario opcionEncontrada = null;
            try
            {
                con = new SqlConnection(ConexionUtil.ObtenerCadena());
                con.Open();
                com = new SqlCommand("GRUsuario_Loguear", con);                
                com.CommandType = CommandType.StoredProcedure;
                com.Parameters.Add("@vLogUsu", SqlDbType.VarChar).Value=logUsu;
                com.Parameters.Add("@vPasUsu", SqlDbType.VarChar).Value=passUsu;
                resultado = com.ExecuteReader();
                if(resultado.HasRows){
                    while(resultado.Read()){
                        opcionEncontrada = new GRUsuario();
                        opcionEncontrada.iCodUsu = Convert.ToInt32(resultado["iCodUsu"].ToString());
                        opcionEncontrada.vLogUsu = (string)resultado["vLogUsu"];
                        opcionEncontrada.vApePat = (string)resultado["vApePat"];
                        opcionEncontrada.vApeMat = (string)resultado["vApeMat"];
                        opcionEncontrada.vNomUsu = (string)resultado["vNomUsu"];
                        opcionEncontrada.vPasUsu = (string)resultado["vPasUsu"];
                        opcionEncontrada.bActivoUsu = Convert.ToBoolean(resultado["bActivoUsu"].ToString());
                        opcionEncontrada.iCodUsuA = Convert.ToInt32(resultado["iCodUsuA"].ToString());
                        opcionEncontrada.vNomTer = (string)resultado["vNomTer"];
                        opcionEncontrada.dtFecAct = Convert.ToDateTime(resultado["dtFecAct"].ToString());
                    }
                }
            }catch{
                opcionEncontrada = null;
            }finally{
                if (resultado != null)
                    resultado.Close();
                if (con.State == ConnectionState.Open)
                    con.Close();
            }
            return opcionEncontrada;
        }

        //GRUsuario_ListarNombres
        public List<GRUsuario> ListarNombres()
        {
            SqlDataReader resultado = null;
            SqlConnection con = null;
            SqlCommand com = null;
            List<GRUsuario> usuarios = null;
            try
            {
                con = new SqlConnection(ConexionUtil.ObtenerCadena());
                con.Open();
                com = new SqlCommand("GRUsuario_ListarNombres", con);
                com.CommandType = CommandType.StoredProcedure;
                resultado = com.ExecuteReader();
                if (resultado.HasRows)
                {
                    usuarios = new List<GRUsuario>();
                    while (resultado.Read())
                    {
                        GRUsuario usuario = new GRUsuario()
                        {                            
                            iCodUsu = Convert.ToInt32(resultado["iCodUsu"].ToString()),
                            vLogUsu = (string)resultado["vLogUsu"],                            
                            vNomUsu = (string)resultado["vNomUsu"],
                            vPasUsu = (string)resultado["vPasUsu"],
                            bActivoUsu = Convert.ToBoolean(resultado["bActivoUsu"].ToString()),
                            iCodUsuA = Convert.ToInt32(resultado["iCodUsu"].ToString()),
                            vNomTer = (string)resultado["vNomTer"],
                            dtFecAct = Convert.ToDateTime(resultado["dtFecAct"].ToString())
                        };
                        usuarios.Add(usuario);
                    }
                }
            }
            catch
            {
                usuarios = null;
            }
            finally
            {
                if (resultado != null)
                    resultado.Close();
                if (con.State == ConnectionState.Open)
                    con.Close();
            }
            return usuarios;
        }


        public GRUsuario Obtener(int codigo)
        {
            SqlDataReader resultado = null;
            SqlConnection con = null;
            SqlCommand com = null;
            GRUsuario opcionEncontrada = new GRUsuario();
            try
            {
                con = new SqlConnection(ConexionUtil.ObtenerCadena());
                con.Open();
                com = new SqlCommand("GRUsuario_Obtener", con);
                com.CommandType = CommandType.StoredProcedure;
                com.Parameters.Add("@iCodUsu", SqlDbType.Int).Value = codigo;
                resultado = com.ExecuteReader();
                if (resultado.HasRows)
                {
                    while (resultado.Read())
                    {
                        opcionEncontrada.iCodUsu = Convert.ToInt32(resultado["iCodUsu"].ToString());
                        opcionEncontrada.vLogUsu = (string)resultado["vLogUsu"];
                        opcionEncontrada.vApePat = (string)resultado["vApePat"];
                        opcionEncontrada.vApeMat = (string)resultado["vApeMat"];
                        opcionEncontrada.vNomUsu = (string)resultado["vNomUsu"];
                        opcionEncontrada.vPasUsu = (string)resultado["vPasUsu"];
                        opcionEncontrada.bActivoUsu = Convert.ToBoolean(resultado["bActivoUsu"].ToString());
                        opcionEncontrada.iCodUsuA = Convert.ToInt32(resultado["iCodUsuA"].ToString());
                        opcionEncontrada.vNomTer = (string)resultado["vNomTer"];
                        opcionEncontrada.dtFecAct = Convert.ToDateTime(resultado["dtFecAct"].ToString());
                    }
                }
            }
            catch
            {
                opcionEncontrada = null;
            }
            finally
            {
                if (resultado != null)
                    resultado.Close();
                if (con.State == ConnectionState.Open)
                    con.Close();
            }
            return opcionEncontrada;
        }

        public List<GRUsuario> Listar()
        {

            List<GRUsuario> opciones = null;
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand("GRUsuario_Listar", con))
                {
                    com.CommandType = CommandType.StoredProcedure;
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        while (resultado.Read())
                        {
                            opciones.Add(CargarOpcion(resultado));
                        }
                    }
                }
            }
            return opciones;
        }

        private GRUsuario CargarOpcion(IDataReader resultado)
        {
            GRUsuario opcion = new GRUsuario()
            {
                iCodUsu = Convert.ToInt32(resultado["iCodUsu"].ToString()),
                vLogUsu = (string)resultado["vLogUsu"],
                vApePat = (string)resultado["vApePat"],
                vApeMat = (string)resultado["vApeMat"],
                vNomUsu = (string)resultado["vNomUsu"],
                vPasUsu = (string)resultado["vPasUsu"],
                bActivoUsu = Convert.ToBoolean(resultado["bActivoOpc"].ToString()),
                iCodUsuA = Convert.ToInt32(resultado["iCodUsu"].ToString()),
                vNomTer = (string)resultado["vNomTer"],
                dtFecAct = Convert.ToDateTime(resultado["dtFecAct"].ToString())
            };
            return opcion;
        }

    }
}